实现电影级别的分镜,推拉式镜头等,需要2017以上的版本才能使用,配合TimeLine一起使用,和Animator一起.
虚拟摄像机不支持Align with View【有BUG】还是手动拖比较好 1:实现简单的相机跟随效果 使用TimeLine实现,由于这次不同于“Unity动画系统案例1”那样需要对人物进行控制。这个项目只是单纯的做CG效果。所以不需要指定动画状态机【但必须挂在Animator组件:原因已经在“Unity动画系统案例1”讲过了】,用TimeLine。对动画设置初始offset就可以了。 步骤,导入人物场景后,创建一个空物体,取名TimeLine,挂载DirectorPlayable插件,创建一个空的.playable片段指定过去 将人物拖到TimeLine面板创建AnimationTrack,由于官方unity娘的动画是不带位移的。这里使用其他的动画【带位移的那种】 该动画要设置剪切,并设置为循环,在直接点击边界拉伸,让持续时间更长一点【动画系统与TImeLine中已经讲过这些的处理】
此时点击Cinemachine菜单栏,创建一个最简单的Virtual Camera 此时会多出一个游戏物体,该游戏物体只挂在了一个组件 【注意,他不是摄像机本身,他只是管理摄像机】 添加后,会发现场景中的主摄像机发生了改变,多了一个红色图标,并添加了一个名为Cinemachine Brain的组件 Cinemachine Brain用于管理所有的虚拟摄像机。Live Camera就代表当前的 虚拟摄像机。场景中可以存在多个虚拟摄像机。当有多个虚拟摄像机时,主摄像机的默认当前设置总是最新创建的【层级窗口靠下面】的虚拟摄像机 这个组件就是将当前的虚拟摄像机所看到的,拿给真实存在的主摄像机来渲染。【所以不耗费性能,因为真实的相机只有一个,其他的是虚拟相机】 此时主摄像机会被锁死,移动不了 要修改摄像机位置,只能修改当前虚拟摄像机的位置
(一)VirtualCamera的两种跟随方式【并没有将任何主摄像机/虚拟摄像机放入TimeLine】 (1)设置Follow实现位置跟随 (摄像机跟着目标一起移动,保持一定的相对位置) 打开当前虚拟摄像机的检视面板 设置跟随目标,和偏移量,【可以手动输入,也可以拖动实现】 Damping代表平滑程度 这几个设置都是有关镜头的, 第一个代表视野的大小,视野越大,越靠近屏幕边缘就会畸变【类似广角相机的效果】 第二个通常不用管他默认就行 第三个代表视野的远近,该值代表5000m之外的东西就看不到了 第四个是镜头旋转【不是摄像机的rotation】直接对镜头以正前方向为轴的旋转,一般用于模拟开车门,被打翻在地上滚眼中所见
(2)设置Look At实现带有镜头旋转的跟随 (摄像机位置并没有移动,只是朝向的改变) 另外一种跟随的方式LookAt,使用这个前,将Follw置为空,避免影响。这两个是可以一起用【采访跟拍的效果】 比如看向脸 此时Scene窗口会变为这样 这些区域的含义分别是 中间的区域【原本的颜色】:叫做死亡区域,LookAt的这个目标在这个区域内,摄像机是不会跟随的 蓝色区域:代表缓冲区域,此时摄像机会开始跟随,使目标在中间的透明区域 红色区域:不可到达区域,跟随过程中目标是不可能到达这些区域的 Aim标签就是对这些进行设置,当然也可以直接对这些线操作 除此之外,还有一些对屏幕位置,平滑度的一些设定。 实际效果就是
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316225530727.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rhbnl1MTU5,size_16,color_FFFFFF,t_70)
【追加功能:模拟手持摄像机】 展开noise选项卡,选择类型 就可以模拟出这种效果 【优化】如果相机在跟随时抖动幅度太大,晃动厉害。应当对其跟随目标的这个动画进行一定的处理,比如勾选rotation 的bake into pose或是position y方向上的 【小技巧】在游戏运行时,想知道当前的主摄像机播放的是哪个虚拟摄像机的画面,可以在主摄像机里面的Brain插件下勾选show debug text 此时Game窗口的左上角就会显示当前的虚拟摄像机
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316225635387.png)
当场景中存在多个虚拟相机时,相机的priority优先级属性将其作用,主摄像机中渲染的内容是优先级最高的那个 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316225650688.png)
所以LiveCamera不能手动修改,而是只能通过更改虚拟摄像机的优先级。 优先级相同的话,以时间较新的为准【任何具有层级/优先级关系的东西基本上都是这样】
【小技巧】由于上面这个优先级问题,产生了一个小技巧。 我想在当前的虚拟摄像机情况下,修改另外一个虚拟摄像机一些位置旋转之内的操作。但由于优先级缘故,这个虚拟摄像机必然不可见 想让他临时可见进行修改而又不再修改相机priority的情况下,点击solo可以临时开启 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316225746432.png)
(二)镜头融合/分镜 将多个虚拟摄像机看向跟随不同的位置,设置好,并命名好以示区分。相机的优先级也要区分开,最好都不一样【因为如果写代码实现某些效果程序将会控制这个属性,然而这里并不需要,TimeLine帮我们办好一切】 由于导入Cinemachine插件,在创建TimeLine轨道时又多了一个选项,Cinemachine轨道,选择这个轨道 需要指定一个真实摄像机,该摄像机必须挂了Cinemachine brain组件,该项目中,就是这个主摄像机,将其指定过去,并创建Cinemachine Track空片段 单击这些片段,到检视面板,就可以设置其对应的虚拟摄像机了,在运行时就会有分镜的效果,自动切换虚拟摄像机。【这就比TimeLine里面的Activtation Track对相机开关方便多了,也更加节省性能】 当超过这些片段或者是中间的这些空白区域,主摄像机的画面就是虚拟摄像机中优先级最高的那个 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316225851734.png)
同样:他和其他的Track一样,也可以做些淡入淡出,改时长,切换时衔接过渡 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316225908464.png)
(三)轨道镜头 创建推轨相机,使用Dolly Camera Track 此时会产生两个物体,一个虚拟摄像机和一个DollyTrack.【该插件有时候会产生bug即游戏物体位置并不是虚拟摄像机所在位置,如果出现,就删除这个虚拟摄像机,重新创建一个并设置为这个模式指定DollyTrack】 并且该虚拟摄像机的模式已经被指定为 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316230000334.png)
为Tracked Dolly,刚才所讲的第一种默认是为Transpoer 并且这个轨道路径已经指定为刚刚生成的DollyTrack 现在演示轨道摄像机,为避免原来的轨道的影响,可以添加一个Track group管理并且将其静音,把刚刚的那个虚拟摄像机优先级设高保证显示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316230020518.png)
点击DollyTrack1,添加轨道的路径点。【虚拟摄像机只是在这些点上移动,朝向始终不会改变,LOOKAT需要自己去设置】 添加路径点后 勾选Loop会自动进行首尾相连. ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316230128964.png)
点击白色小球可以直接拖动,绿色的轨道就是虚拟摄像机的行进路线,其中Roll属性就是指翻转,类似于过山车轨道那种 DNA双螺旋那种效果。 摄像机LookAt要设置,并且保留Follow为空,因为此时是轨道控制运动而非是自主跟随 此时回到Game窗口,发现摄像机目前是在关键点第一个的位置看向目标的 直接运行是没有效果的,轨道镜头的控制,是根据 当前虚拟摄像机下 Path Position这个值来运行的 可以手动拖动他的值来查看摄像机在轨道上的运动 这个值和路径点的标号对应 此时为3 所以为了控制它,需要创建一个Animation来修改这个Path Position里面的值来实现 拖入这个虚拟摄像机并录制他Path Position值得改变 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316230348123.png)
结束录制并转换为Animation片段 运行后就可以看到实际效果 *自动推轨跟随 刚刚那种需要手动的录制Path Position的值来使推轨进行在做精细的时候这样使用 然而有一种方法可以不创建AnimationTrack也让他做推轨运动 首先要设置follow,然后开启Auto Dolly 此时会自动计算轨道上合适的位置开始,来进行推轨镜头
(四)镜头切镜【可以用于CG,由于自动控制也常用于游戏过程中的镜头切换】 【注意!】这里的切镜与前面所讲的类似但又大有不同: 镜头的融合主要就是虚拟摄像机在TimeLine中 创建Cinemachine Track轨道来实现的镜头切换 而这里的镜头切换用的是ClearShotCamera 他的镜头切换是自动的,不需要在TimeLIne中手动设置,当拍摄目标时遇到障碍物看不见时就会自动切换机位 创建ClearShot摄像机 其子物体代表机位,先调高父物体优先级,保证当前显示的是这个 点击+号添加新的机位,将所有机位的位置设置好。优先级可以进行考虑,全部一样不改也行.然后只要摄像机和目标之间有障碍物挡住,就会自动寻找一个合适的摄像机来显示 需要注意的是,这个障碍物必须要有碰撞器才判断的出来,【当然,利用的射线检测的原理,可以指定某些层时才切,或是忽略某些tag—在Cinemachine Colider中设置。】 切镜方式也是可以指定的 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019031623052647.png)
(五)第三人称自由镜头 既跟随,又可以自由旋转,在第三人称中 新创建一个场景,ThridPersonFreeCamera,并导入资源.[场景+Unity娘] 创建一个自由摄像机 把跟随目标和朝向目标指定过去,设置初始的位置。直接运行 这就已经实现了跟随目标和随鼠标旋转视野,竖直方向上移动鼠标拉近拉远 可以看到相机有很多红线,很多地方可以在该FreeLookCamera检视面板微调 红线的修改在 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316230653676.png)
该功能很强大,除了可以,因为在三个位置bottom midle top都有分别对应的设置 甚至可以根据在不同位置设置,重写Look at的对象。 取消Commonlens选项框,则可以分别定义相机在3个高度上面镜头的具体参数,勾选则用统一的设置 【注意:Axis Controll的设置】 实现鼠标移动控制镜头的原理是他获取了Input下的Mouse X Mouse Y 当然他也可以换为其他的值,比如通过手柄操控。
(六)状态驱动相机 非常实用!!! 他会根据目标动画状态机的状态,来切换机位,比如目标在正常行走的时候是一个机位,目标在放大招时,由于动画状态改变,自动换一个机位对目标的动作进行特写。 使用该相机必须要求 观察目标 具有Animator组件,且状态不能太少 现在用这个 状态驱动相机实现 以下效果: 1:idle状态时对unity娘进行面部特写【一个虚拟摄像机】 2:处于locomotion混合树的时候就使用【刚刚那个自由摄像机】 3:处于WalkBack状态时的时候j进行远部摄像【另一个虚拟摄像机】 步骤: 创建一个State Driven摄像机 与切镜clera shot类似,也会生成一个父物体带一个子物体。 子物体代表机位。 先给这个状态驱动摄像机指定跟随目标和look at对象,还有目标的Animator 点击+号可以添加更多机位 注意后续添加的摄像机都是灰色的,且开启不了,也移动不了,只要把他托上去,作为第一个子物体才能修改【算一个BUG】 最后将刚刚那个自由摄像机也放下来作为子物体,此时那个列表会自动添加上这个摄像机 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316231208781.png)
这里的优先级可以不用设置,因为只有存在相同情况时才会比较优先级。让优先级高的那个显示,这里不可能存在那种情况 现在开始设置 虚拟摄像机机位对应的状态 状态添加即可 这里的wait和min代表时间延时 wait代表,该动画动画已经切换过了等x秒在切换摄像机【结束等】 Min代表,该动画刚切换,等x秒再从原来的摄像机切过来【开始等】 切换的融合效果在Defalut Blend中设置,当然还可以自定义每个之间转换的效果,点击CreatAsset按钮可以设计细节 (七)2D相机 既可以在3d项目中使用也可以在2d项目中使用。 其能实现的效果就是,摄像机能够跟随目标,但是不会超出一个边界。 比如,角色在台子上跳跃,如果继续跟随就会照射到地图之外的内容。 使用这种相机就能保证不会出现问题。 这次不用建场景,直接打开该插件的官方用例 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316231326821.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rhbnl1MTU5,size_16,color_FFFFFF,t_70)
可以发现跳起时相机并没有跟随,照到边界之外. 创建2d摄像机 并指定观察对象,由于是2d正交摄像机,所以不需要look at 这种相机实现该效果的原因是因为有一个2d的多边形碰撞器规定了该2d相机的跟随范围 创建一个空物体,并加上 2d多边形碰撞器组件,编辑碰撞器绘制出跟随范围 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316231412849.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rhbnl1MTU5,size_16,color_FFFFFF,t_70)
然后将这个碰撞器指定给虚拟摄像机即可 (八)混合列表摄像机 其设置与状态驱动摄像机类似,也是一个父物体包含多个子物体,这些子物体就是虚拟摄像机机位 只不过机位的切换是根据时间进行的,而不是动画状态。 他和镜头融合达到的效果差不多,只不过这个不用在TimeLine中创建cinemachine的轨道。
(九)混合机位相机 他的效果是,其可以包含多个子物体,也就是机位,通过设置权值,达到这些机位中的一个折中的效果进行显示 比如Bottom就是这种视角 而top是这种视角 然后通过设置每个机位权值后折中下来的效果就是
这种相机在进行目标跟随的时候可以添加插件提供的脚本来实现,权重的自动变换,合适 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316231631259.png)
(十)轨道物体(不是摄像机,对于游戏物体) 与轨道相机类似,也是让游戏物体在轨道上运动 创建后 按照同样的方式创建轨道关键点 要使其运动起来,比推轨相机简单,推轨相机在不使用Auto dolly的情况下要用动画来控制path position的值来使其运动。 而轨道物体更简单,直接将 要运动的物体作为 DollyCart的子物体,并ReSet他的Transform,一定要ReSet,保证父子之间没有相对位移才能保证运动的时候是在轨道上。
然后只用设置speed,运行就直接播放了,不用TimeLine ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316231759850.png)
然后鸟就在预定轨道上运动了, 此时再加一个虚拟摄像机一般的。设置follo,look at就行了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316231825708.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rhbnl1MTU5,size_16,color_FFFFFF,t_70)
【补充】 当Body模式为Transposer时,不同的Binding模式的效果 当然,这种效果只能在 目标具有旋转时才会有区别。这几个演示目标都没有旋转,只是移动 默认为Target with world up,简单来说,不管目标怎么转,摄像机不会跟着他转,不会跟着翻转,因为with的是世界坐标,目标自转是局部坐标 Look to target,简单来说就是,目标在转,摄像机也会跟着转,跟着翻转,效果就像是两个人面对面拉着一起转圈,你眼中始终看着对方的脸的效果 其他的不是很常用,可以在官方案例中查看他们的区别 Extensions标签有几个选项。点击后会添加相应的组件 由于在创建具体的虚拟摄像机时,已经自动的添加了,所以一般不需要设置。 第一个是前面切镜摄像机所需要的摄像机碰撞器,第二个是前面2d摄像机防止摄像机移除边界的指定多边形2d碰撞器 第3个根据需要:有些时候需要添加,即在不做跟随follow的情况下,只是look at那么就会有远小近大的效果,如果添加了这个,那么就不会。始终都是一个大小【这也叫做固定视角跟随】
【Tips:注意!该插件的黄色提醒】 这种黄色三角形里面的属性说明修改了不可用,因为他的前需没有设置,比如这里的Aim 报黄色警告,因为前面的LookAt还没有设置 虽然,点击TIimeLine的播放就可以进行效果预览,但这并不代表实际最终的效果,预览还是要运行游戏来看,才是最终效果 如果发现播放卡顿,可以查看主摄像机的update method 修改为fixedUpdate ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190316231947882.png)
【CG动画制作中,TimeLine与Cinemachine区别和联系】 1【实现镜头跟随方面】:以前所讲的TimeLine主要用于实现轨道镜头和分镜效果上,以帧的方式设置关键点,而且分镜将会涉及到多个实体摄像机,性能开销较大,且如果要用于镜头跟随,按帧来拖十分麻烦。功能不如这个Cinemachine强大,这个只需要稍微设置就可以达到理想的效果。
2【轨道镜头】cinemachine更直观,有轨道显示,虽然也要对path position这个值创建动画,并且对小圆点拖出轨迹。但镜头直接设置Look aT目标就行了。以前的TIME line直接对主摄像机创建AnimationTrack每帧都要拖,设置位置和朝向,不是很直观和方便。
==========================================================================================================================================================================================================================================以上所讲的是对一个物体的跟随,朝向等摄像机的设置 =以下为对目标组【即多个目标】的跟随 ==由于项目设置有冲突,所以另外创了个项目 导入Cinemachine插件和Tank Tourise这个实例项目 目标: 该示例项目中摄像机的效果就是跟随的多个目标两个,且两个坦克离得很远的时候,镜头会被拉远 这些跟随都是通过该项目中的一个脚本实现的。 我们的目标就是不用这个脚本,而用 CineMachine插件实现 步骤 移除或禁用掉CameraController脚本。 由于两个坦克是动态生成的,这次为演示摄像机,直接事先把坦克拖出来,禁用掉原来的GameManager防止重复生成网页. 创建一个TargetGroup相机 此时会自动生成两个物体 一个虚拟摄像机和一个targetGroup,且这个目标组已经指定给了这个虚拟摄像机。 现在回到TargetGroup的检视面板 添加指定要观察哪些目标 后面的权重则代表,权值越大,相机就越靠近谁 回到scene场景调节该虚拟摄像机的位置到合适。 这个摄像机是一个正交视图摄像机 该值可以修改摄像机的大小。 可以发现当两个坦克很近的时候,镜头就会拉的很近。所以要设置一下最远和最近距离 在虚拟摄像机的Aim标签下有 将min调大点即可
太累了,教程中所需要的资源我会单独的提供在一个博客中 【!!!】欢迎关注我的个人线上课堂https://www.zuikakuedu.cn,内含JavaWeb与Unity游戏开发实战教程,完全免费!,Csdn博客涉及的课程资料也在该网站上
|